import globals from 'globals'
import pluginJs from '@eslint/js'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'
import eslintConfigPrettier from 'eslint-config-prettier'

/** @type {import('eslint').Linter.Config[]} */
export default [
    { files: ['**/*.{js,mjs,cjs,ts,vue}'] },
    { languageOptions: { globals: globals.browser } },
    pluginJs.configs.recommended,
    ...tseslint.configs.recommended,
    ...pluginVue.configs['flat/essential'],
    {
        files: ['**/*.vue'],
        languageOptions: { parserOptions: { parser: tseslint.parser } },
    },
    {
        ignores: ['vite.config.ts'],
    },
    {
        rules: {
            semi: ['error', 'never'], // 强制分号
            eqeqeq: 'error', // 强制 === 和 !==
            quotes: ['error', 'single'], // 强制使用单引号
            indent: ['error', 4], // 使用 4 个空格缩进
            curly: ['error', 'all'],
            'no-var': 'error', // 对所有文件生效
            'prefer-const': 'error', // 强制使用 const
            'comma-dangle': ['error', 'always-multiline'], // 多行时强制末尾逗号
            '@typescript-eslint/no-unused-vars': 'off', // 可选：禁用未使用变量的规则
            'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
            'no-useless-escape': 'off', // 禁止不必要的转义字符
            'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
            'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
            'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
            'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
            'no-undef': 'off', // 禁用 no-undef 规则
            '@typescript-eslint/no-explicit-any': ['off'], // 把我加上
        },
    },
    eslintConfigPrettier,
]
